この例では、2個のボタンと1個のリストボックスを使用して、.zip ファイルから画像を取得する方法を示します。
zip ファイルから画像を直接取得するために、最初に、いくつかの画像ファイルを1つの zip ファイルに圧縮するコードを追加します。この例では、btnNew_Click イベントにこのコードを追加します。ここで、ボタンがクリックされたときに画像の新しい .zip ファイルを作成します。
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void btnNew_Click(object sender, RoutedEventArgs e) |
|
次に、次のコードを使用して ListBox 内のリストに画像ファイルを追加します。
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
// 追加するファイルのリストを取得します。
OpenFileDialog fo = new OpenFileDialog();
fo.Multiselect = true;
if (fo.ShowDialog() == true)
{
// リストにファイルを追加します。
foreach (FileInfo file in fo.Files)
{
Stream stream = file.OpenRead();
listBox1.Items.Add(file.Name);
zipFile.Entries.Add(stream, file.Name);
}
|
|
画像を選択できるようにするには、画像データを含むストリームを取得し(OpenReader メソッド)、次のコードを listBox1_SelectionChanged イベントと StreamCopy イベントに追加します。
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 選択された項目を取得します。
string item = (string)listBox1.SelectedItem;
// 画像を圧縮ストリームから直接ロードします。
Stream stream = zipFile.Entries[item].OpenReader();
using (MemoryStream ms = new MemoryStream())
{
StreamCopy(ms, stream);
BitmapImage img = new BitmapImage();
img.SetSource(ms);
this.image1.Source = img;
// ストリームを閉じます。
stream.Close();
}
}
private void StreamCopy(Stream dstStream, Stream srcStream)
{
byte[] buffer = new byte[32768];
for (; ; )
{
int read = srcStream.Read(buffer, 0, buffer.Length);
if (read == 0) break;
dstStream.Write(buffer, 0, read);
}
dstStream.Flush();
}
|
|
ICO、TIFF、BMP、JPG などのいくつかのタイプの画像が表示されます。
